home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
More Source
/
C⁄C++
/
Marathon Map Viewer
/
@Source
/
levelUtils.cpp
< prev
next >
Wrap
Text File
|
1995-06-05
|
3KB
|
135 lines
/*-----------------------------------------------------------------
-----------------------------------------------------------------*/
#include "levelUtils.h"
/*-----------------------------------------------------------------
Finds out the center of the map by getting the bounds etc.
-----------------------------------------------------------------*/
void getMapCenter(levelData *theLevelData, long *centerX, long *centerY)
{
long minx = 32767, miny = 32767, maxx = -32767, maxy = -32767;
long x, curX, curY;
for (x = 0; x < theLevelData->numPoints; ++x)
{
curX = theLevelData->thePoints[x].x;
curY = theLevelData->thePoints[x].y;
if (curX < minx)
minx = curX;
if (curX > maxx)
maxx = curX;
if (curY < miny)
miny = curY;
if (curY > maxy)
maxy = curY;
}
*centerX = (maxx + minx) / 2;
*centerY = (miny + maxy) / 2;
}
/*-----------------------------------------------------------------
Makes all the EPNTs into PNTS
-----------------------------------------------------------------*/
void convertEPNTstoPNTS(levelData *theLevelData)
{
if (!theLevelData->numExtendedPts)
return;
short numEpnts = theLevelData->numExtendedPts;
Point newPoint;
theLevelData->numExtendedPts = 0;
for (int x = 0; x < numEpnts; ++x)
{
newPoint.h = theLevelData->theExtendedPts[x].x;
newPoint.v = theLevelData->theExtendedPts[x].y;
addNewPoint(theLevelData, newPoint);
}
DisposePtr((Ptr)theLevelData->theExtendedPts);
theLevelData->theExtendedPts = nil;
}
/*-----------------------------------------------------------------
Add a new point and return its index
-----------------------------------------------------------------*/
short addNewPoint(levelData *theLevelData, Point where)
{
// add a new regular point here
if (theLevelData->numPoints >= MAX_VERTICIES)
return -1;
long numPoints = ++theLevelData->numPoints;
theLevelData->thePoints = (PNTSdata*)resizeArray(theLevelData->thePoints, sizeof(PNTSdata) * numPoints);
// set the data
--numPoints;
theLevelData->thePoints[numPoints].x = where.h;
theLevelData->thePoints[numPoints].y = where.v;
return numPoints;
}
/*-----------------------------------------------------------------
Makes the size of an array bigger
-----------------------------------------------------------------*/
void *resizeArray(void *theArray, long newSize)
{
Ptr newArray;
long oldSize;
if (theArray)
{
oldSize = GetPtrSize((Ptr)theArray);
SetPtrSize((Ptr)theArray, newSize);
if (MemError() == noErr)
{
// set new data to 0
for (long x = oldSize; x < newSize; ++x)
((char *)theArray)[x] = 0;
return theArray;
}
}
// make new bigger array
newArray = NewPtrClear(newSize);
OSErr theErr = MemError();
if (!newArray || theErr)
SysBreak();
if (theArray)
{
oldSize = GetPtrSize((Ptr)theArray);
// copy the old data
BlockMoveData(theArray, newArray, oldSize);
// dispose the old array
DisposePtr((Ptr)theArray);
}
return newArray;
}